# Model relationships to be included in the project import/export
#
# This list _must_ only contain relationships that are available to both CE and
# EE. EE specific relationships must be defined in the `ee` section further
# down below.
tree:
  project:
    - labels:
      - :priorities
    - milestones:
      - events:
        - :push_event_payload
    - issues:
      - events:
        - :push_event_payload
      - :timelogs
      - notes:
        - :author
        - :award_emoji
        - :system_note_metadata
        - events:
          - :push_event_payload
      - label_links:
        - label:
          - :priorities
      - milestone:
        - events:
          - :push_event_payload
      - resource_label_events:
        - label:
          - :priorities
      - resource_milestone_events:
        - :milestone
      - :resource_state_events
      - designs:
        - notes:
          - :author
          - events:
            - :push_event_payload
      - design_versions:
        - actions:
          - :design # Duplicate export of issues.designs in order to link the record to both Issue and Action
      - :issue_assignees
      - :zoom_meetings
      - :sentry_issue
      - :award_emoji
      - :work_item_type
    - snippets:
      - :award_emoji
      - notes:
        - :author
        - :award_emoji
    - releases:
      - :links
      - milestone_releases:
        - :milestone
    - project_members:
      - :user
    - merge_requests:
      - :approvals
      - :metrics
      - :award_emoji
      - :merge_request_assignees
      - :merge_request_reviewers
      - notes:
        - :author
        - :award_emoji
        - :system_note_metadata
        - events:
          - :push_event_payload
        - :suggestions
      - merge_request_diff:
        - merge_request_diff_commits:
          - :commit_author
          - :committer
        - :merge_request_diff_files
      - events:
        - :push_event_payload
      - :timelogs
      - label_links:
        - label:
          - :priorities
      - milestone:
        - events:
          - :push_event_payload
      - resource_label_events:
        - label:
          - :priorities
      - resource_milestone_events:
        - :milestone
      - :resource_state_events
    - :external_pull_requests
    - commit_notes:
      - :author
      - events:
        - :push_event_payload
    - ci_pipelines:
      - stages:
        - :builds
        - :generic_commit_statuses
        - :bridges
      - :external_pull_request
      - :merge_request
      - :pipeline_metadata
    - :auto_devops
    - :pipeline_schedules
    - :container_expiration_policy
    - protected_branches:
      - :merge_access_levels
      - :push_access_levels
    - protected_tags:
      - :create_access_levels
    - :project_feature
    - :custom_attributes
    - :prometheus_metrics
    - :project_badges
    - :ci_cd_settings
    - :error_tracking_setting
    - :metrics_setting
    - boards:
      - lists:
        - label:
          - :priorities
    - :service_desk_setting
  group_members:
    - :user

# Used to support old exports that were exported before the removal/rename of the associations
#
# For example, statuses of ci_pipelines are no longer exported, and instead, statuses are
# exported as builds, generic_commit_statuses, and bridges. So in order to allow statuses
# to be still imported, it is added to the list below.
import_only_tree:
  project:
    - ci_pipelines:
      - notes:
        - :author
        - events:
          - :push_event_payload
      - stages:
        - :statuses

# Only include the following attributes for the models specified.
included_attributes:
  user:
    - :id
    - :public_email
    - :username
  author:
    - :name
  approvals:
    - :user_id
    - :created_at
    - :updated_at
  ci_cd_settings:
    - :group_runners_enabled
    - :runner_token_expiration_interval
    - :default_git_depth
  metrics_setting:
    - :dashboard_timezone
    - :external_dashboard_url
    - :project_id
  project_badges:
    - :created_at
    - :image_url
    - :link_url
    - :name
    - :project_id
    - :updated_at
  pipeline_schedules:
    - :active
    - :created_at
    - :cron
    - :cron_timezone
    - :description
    - :next_run_at
    - :owner_id
    - :project_id
    - :ref
    - :updated_at
  error_tracking_setting:
    - :api_url
    - :organization_name
    - :project_id
    - :project_name
  auto_devops:
    - :created_at
    - :deploy_strategy
    - :enabled
    - :project_id
    - :updated_at
  boards:
    - :project_id
    - :created_at
    - :updated_at
    - :group_id
    - :weight
    - :name
    - :hide_backlog_list
    - :hide_closed_list
  lists:
    - :list_type
    - :position
    - :created_at
    - :updated_at
    - :user_id
    - :max_issue_count
    - :max_issue_weight
    - :limit_metric
  custom_attributes:
    - :created_at
    - :updated_at
    - :project_id
    - :key
    - :value
  label: &label_definition
    - :title
    - :color
    - :project_id
    - :group_id
    - :created_at
    - :updated_at
    - :template
    - :description
    - :priority
  labels: *label_definition
  priorities:
    - :project_id
    - :priority
    - :created_at
    - :updated_at
  milestone: &milestone_definition
    - :iid
    - :title
    - :project_id
    - :group_id
    - :description
    - :due_date
    - :created_at
    - :updated_at
    - :start_date
    - :state
  milestones: *milestone_definition
  protected_branches:
    - :project_id
    - :name
    - :created_at
    - :updated_at
    - :code_owner_approval_required
    - :allow_force_push
  protected_tags:
    - :project_id
    - :name
    - :created_at
    - :updated_at
  create_access_levels:
    - :access_level
    - :created_at
    - :updated_at
    - :user_id
    - :group_id
  merge_access_levels:
    - :access_level
    - :created_at
    - :updated_at
    - :user_id
    - :group_id
  push_access_levels:
    - :access_level
    - :created_at
    - :updated_at
    - :user_id
    - :group_id
  releases:
    - :tag
    - :description
    - :project_id
    - :author_id
    - :created_at
    - :updated_at
    - :name
    - :sha
    - :released_at
  links:
    - :url
    - :name
    - :created_at
    - :updated_at
    - :filepath
    - :link_type
  container_expiration_policy:
    - :created_at
    - :updated_at
    - :next_run_at
    - :project_id
    - :name_regex
    - :cadence
    - :older_than
    - :keep_n
    - :enabled
    - :name_regex_keep
  project_feature:
    - :project_id
    - :merge_requests_access_level
    - :issues_access_level
    - :wiki_access_level
    - :snippets_access_level
    - :builds_access_level
    - :created_at
    - :updated_at
    - :repository_access_level
    - :pages_access_level
    - :forking_access_level
    - :metrics_dashboard_access_level
    - :operations_access_level
    - :monitor_access_level
    - :analytics_access_level
    - :security_and_compliance_access_level
    - :container_registry_access_level
    - :package_registry_access_level
    - :environments_access_level
    - :feature_flags_access_level
    - :releases_access_level
    - :infrastructure_access_level
    - :model_experiments_access_level
  prometheus_metrics:
    - :created_at
    - :updated_at
    - :project_id
    - :y_label
    - :unit
    - :legend
    - :title
    - :query
    - :group
    - :dashboard_path
  service_desk_setting:
    - :project_id
    - :issue_template_key
    - :project_key
  snippets:
    - :title
    - :content
    - :author_id
    - :project_id
    - :created_at
    - :updated_at
    - :file_name
    - :visibility_level
    - :description
  project_members:
    - :access_level
    - :source_type
    - :user_id
    - :notification_level
    - :created_at
    - :updated_at
    - :created_by_id
    - :invite_email
    - :invite_accepted_at
    - :requested_at
    - :expires_at
    - :ldap
    - :override
  merge_request: &merge_request_definition
    - :target_branch
    - :source_branch
    - :source_project_id
    - :author_id
    - :title
    - :created_at
    - :updated_at
    - :state
    - :merge_status
    - :target_project_id
    - :iid
    - :description
    - :updated_by_id
    - :merge_error
    - :merge_params
    - :merge_when_pipeline_succeeds
    - :merge_user_id
    - :merge_commit_sha
    - :squash_commit_sha
    - :in_progress_merge_commit_sha
    - :lock_version
    - :approvals_before_merge
    - :rebase_commit_sha
    - :time_estimate
    - :squash
    - :last_edited_at
    - :last_edited_by_id
    - :discussion_locked
    - :allow_maintainer_to_push
    - :merge_ref_sha
    - :draft
    - :diff_head_sha
    - :source_branch_sha
    - :target_branch_sha
  merge_requests: *merge_request_definition
  award_emoji:
    - :user_id
    - :name
    - :awardable_type
    - :created_at
    - :updated_at
  commit_author:
    - :name
    - :email
  committer:
    - :name
    - :email
  events:
    - :project_id
    - :target_type
    - :action
    - :author_id
    - :fingerprint
    - :created_at
    - :updated_at
  label_links:
    - :target_type
    - :created_at
    - :updated_at
  merge_request_diff:
    - :state
    - :created_at
    - :updated_at
    - :base_commit_sha
    - :real_size
    - :head_commit_sha
    - :start_commit_sha
    - :commits_count
    - :files_count
    - :sorted
    - :diff_type
  merge_request_diff_commits:
    - :author_name
    - :author_email
    - :committer_name
    - :committer_email
    - :relative_order
    - :sha
    - :authored_date
    - :committed_date
    - :message
    - :trailers
  merge_request_diff_files:
    - :relative_order
    - :new_file
    - :renamed_file
    - :deleted_file
    - :new_path
    - :old_path
    - :a_mode
    - :b_mode
    - :too_large
    - :binary
  metrics:
    - :created_at
    - :updated_at
    - :latest_closed_by_id
    - :latest_closed_at
    - :merged_by_id
    - :merged_at
    - :latest_build_started_at
    - :latest_build_finished_at
    - :first_deployed_to_production_at
    - :first_comment_at
    - :first_commit_at
    - :last_commit_at
    - :diff_size
    - :modified_paths_size
    - :commits_count
    - :first_approved_at
    - :first_reassigned_at
    - :added_lines
    - :target_project_id
    - :removed_lines
  notes:
    - :note
    - :noteable_type
    - :author_id
    - :created_at
    - :updated_at
    - :project_id
    - :attachment
    - :line_code
    - :commit_id
    - :system
    - :st_diff
    - :updated_by_id
    - :type
    - :position
    - :original_position
    - :change_position
    - :resolved_at
    - :resolved_by_id
    - :resolved_by_push
    - :discussion_id
    - :confidential
    - :last_edited_at
  push_event_payload:
    - :commit_count
    - :action
    - :ref_type
    - :commit_from
    - :commit_to
    - :ref
    - :commit_title
    - :ref_count
  resource_label_events:
    - :action
    - :user_id
    - :created_at
  suggestions:
    - :relative_order
    - :applied
    - :commit_id
    - :from_content
    - :to_content
    - :outdated
    - :lines_above
    - :lines_below
  system_note_metadata:
    - :commit_count
    - :action
    - :created_at
    - :updated_at
  timelogs:
    - :time_spent
    - :user_id
    - :project_id
    - :spent_at
    - :created_at
    - :updated_at
    - :summary
  external_pull_request: &external_pull_request_definition
    - :created_at
    - :updated_at
    - :project_id
    - :pull_request_iid
    - :status
    - :source_branch
    - :target_branch
    - :source_repository
    - :target_repository
    - :source_sha
    - :target_sha
  external_pull_requests: *external_pull_request_definition
  statuses: &statuses_definition
    - :project_id
    - :status
    - :finished_at
    - :created_at
    - :updated_at
    - :started_at
    - :coverage
    - :commit_id
    - :name
    - :options
    - :allow_failure
    - :stage
    - :stage_idx
    - :tag
    - :ref
    - :user_id
    - :type
    - :target_url
    - :description
    - :erased_at
    - :artifacts_expire_at
    - :environment
    - :yaml_variables
    - :queued_at
    - :lock_version
    - :coverage_regex
    - :retried
    - :protected
    - :failure_reason
    - :scheduled_at
    - :scheduling_type
    - :ci_stage
  builds: *statuses_definition
  generic_commit_statuses: *statuses_definition
  bridges: *statuses_definition
  ci_pipelines:
    - :ref
    - :sha
    - :before_sha
    - :created_at
    - :updated_at
    - :tag
    - :yaml_errors
    - :committed_at
    - :project_id
    - :status
    - :started_at
    - :finished_at
    - :duration
    - :user_id
    - :lock_version
    - :source
    - :protected
    - :config_source
    - :failure_reason
    - :iid
    - :source_sha
    - :target_sha
  pipeline_metadata:
    - :project_id
    - :name
  stages:
    - :name
    - :status
    - :position
    - :lock_version
    - :project_id
    - :created_at
    - :updated_at
    # - :statuses # old exports use statuses instead of builds, generic_commit_statuses and bridges
  actions:
    - :event
  design: &design_definition
    - :iid
    - :project_id
    - :filename
    - :relative_position
  designs: *design_definition
  design_versions:
    - :created_at
    - :sha
    - :author_id
  issue_assignees:
    - :user_id
  merge_request_assignees:
    - :user_id
    - :created_at
  merge_request_reviewers:
    - :user_id
    - :created_at
    - :state
  sentry_issue:
    - :sentry_issue_identifier
  zoom_meetings:
    - :project_id
    - :issue_status
    - :url
    - :created_at
    - :updated_at
  issues:
    - :title
    - :author_id
    - :project_id
    - :created_at
    - :updated_at
    - :description
    - :state
    - :iid
    - :updated_by_id
    - :confidential
    - :closed_at
    - :closed_by_id
    - :due_date
    - :lock_version
    - :weight
    - :time_estimate
    - :relative_position
    - :external_author
    - :last_edited_at
    - :last_edited_by_id
    - :discussion_locked
    - :health_status
    - :external_key
    - :issue_type
  group_members:
    - :access_level
    - :source_type
    - :user_id
    - :notification_level
    - :created_at
    - :updated_at
    - :created_by_id
    - :invite_email
    - :invite_accepted_at
    - :requested_at
    - :expires_at
    - :ldap
    - :override
  project:
    - :approvals_before_merge
    - :archived
    - :auto_cancel_pending_pipelines
    - :autoclose_referenced_issues
    - :build_allow_git_fetch
    - :build_timeout
    - :delete_error
    - :description
    - :disable_overriding_approvers_per_merge_request
    - :external_authorization_classification_label
    - :has_external_issue_tracker
    - :has_external_wiki
    - :issues_template
    - :jobs_cache_index
    - :last_repository_check_failed
    - :merge_requests_author_approval
    - :merge_requests_disable_committers_approval
    - :merge_requests_ff_only_enabled
    - :merge_requests_rebase_enabled
    - :merge_requests_template
    - :only_allow_merge_if_all_discussions_are_resolved
    - :only_allow_merge_if_pipeline_succeeds
    - :pages_https_only
    - :pending_delete
    - :printing_merge_request_link_enabled
    - :public_builds
    - :remove_source_branch_after_merge
    - :request_access_enabled
    - :require_password_to_approve
    - :reset_approvals_on_push
    - :resolve_outdated_diff_discussions
    - :service_desk_enabled
    - :shared_runners_enabled
    - :suggestion_commit_message
    - :visibility_level
    - :hooks
    - :issues_access_level
    - :forking_access_level
    - :merge_requests_access_level
    - :wiki_access_level
    - :snippets_access_level
    - :builds_access_level
    - :repository_access_level
    - :pages_access_level
    - :metrics_dashboard_access_level
    - :analytics_access_level
    - :operations_access_level
    - :monitor_access_level
    - :security_and_compliance_access_level
    - :container_registry_access_level
    - :package_registry_access_level
    - :environments_access_level
    - :feature_flags_access_level
    - :releases_access_level
    - :infrastructure_access_level
    - :model_experiments_access_level
    - :auto_devops_deploy_strategy
    - :auto_devops_enabled
    - :container_registry_enabled
    - :issues_enabled
    - :jobs_enabled
    - :merge_method
    - :merge_requests_enabled
    - :snippets_enabled
    - :topics
    - :visibility
    - :wiki_enabled
    - :build_git_strategy
    - :build_enabled
    - :security_and_compliance_enabled
    - :allow_merge_on_skipped_pipeline
    - :squash_option
  resource_milestone_events:
    - :user_id
    - :action
    - :created_at
    - :state
  resource_state_events:
    - :user_id
    - :state
    - :created_at
    - :source_commit
    - :close_after_error_tracking_resolve
    - :close_auto_resolve_prometheus_alert
  work_item_type:
    - :base_type

# Do not include the following attributes for the models specified.
excluded_attributes:
  project:
    - :name
    - :path
    - :namespace_id
    - :project_namespace_id
    - :creator_id
    - :pool_repository_id
    - :import_url
    - :import_status
    - :avatar
    - :import_type
    - :import_source
    - :integrations
    - :push_hooks_integrations
    - :tag_push_hooks_integrations
    - :issue_hooks_integrations
    - :confidential_issue_hooks_integrations
    - :merge_request_hooks_integrations
    - :note_hooks_integrations
    - :confidential_note_hooks_integrations
    - :job_hooks_integrations
    - :archive_trace_hooks_integrations
    - :pipeline_hooks_integrations
    - :wiki_page_hooks_integrations
    - :deployment_hooks_integrations
    - :alert_hooks_integrations
    - :incident_hooks_integrations
    - :mirror
    - :runners_token
    - :runners_token_encrypted
    - :repository_storage
    - :repository_read_only
    - :lfs_enabled
    - :created_at
    - :updated_at
    - :id
    - :star_count
    - :last_activity_at
    - :last_repository_updated_at
    - :last_repository_check_at
    - :storage_version
    - :remote_mirror_available_overridden
    - :description_html
    - :repository_languages
    - :bfg_object_map
    - :detected_repository_languages
    - :tag_list
    - :topic_list
    - :mirror_user_id
    - :mirror_trigger_builds
    - :only_mirror_protected_branches
    - :pull_mirror_available_overridden
    - :pull_mirror_branch_prefix
    - :mirror_overwrites_diverged_branches
    - :packages_enabled
    - :mirror_last_update_at
    - :mirror_last_successful_update_at
    - :emails_disabled
    - :max_pages_size
    - :max_artifacts_size
    - :marked_for_deletion_at
    - :marked_for_deletion_by_user_id
    - :compliance_framework_setting
    - :show_default_award_emojis
    - :warn_about_potentially_unwanted_characters
    - :enforce_auth_checks_on_uploads
    - :services
    - :exported_protected_branches
    - :repository_size_limit
    - :external_webhook_token
    - :incident_management_issuable_escalation_statuses
  approvals:
    - :id
    - :merge_request_id
  namespaces:
    - :runners_token
    - :runners_token_encrypted
  project_import_state:
    - :last_error
    - :jid
    - :last_update_at
    - :last_successful_update_at
  prometheus_metrics:
    - :common
    - :identifier
  snippets:
    - :expired_at
    - :secret
    - :encrypted_secret_token
    - :encrypted_secret_token_iv
    - :repository_read_only
  merge_request_diff:
    - :external_diff
    - :stored_externally
    - :external_diff_store
    - :merge_request_id
    - :verification_retry_at
    - :verified_at
    - :verification_retry_count
    - :verification_checksum
    - :verification_failure
  merge_request_diff_commits:
    - :merge_request_diff_id
    - :commit_author_id
    - :committer_id
  merge_request_diff_commit_user:
    - :id
  merge_request_diff_detail:
    - :merge_request_diff_id
    - :verification_retry_at
    - :verified_at
    - :verification_retry_count
    - :verification_checksum
    - :verification_failure
  merge_request_diff_files:
    - :diff
    - :external_diff_offset
    - :external_diff_size
    - :merge_request_diff_id
  issues:
    - :milestone_id
    - :sprint_id
    - :moved_to_id
    - :sent_notifications
    - :state_id
    - :duplicated_to_id
    - :promoted_to_epic_id
    - :blocking_issues_count
    - :service_desk_reply_to
    - :upvotes_count
    - :work_item_type_id
    - :email_message_id
    - :incident_management_issuable_escalation_status
  merge_request: &merge_request_excluded_definition
    - :milestone_id
    - :sprint_id
    - :ref_fetched
    - :merge_jid
    - :rebase_jid
    - :latest_merge_request_diff_id
    - :head_pipeline_id
    - :state_id
  merge_requests: *merge_request_excluded_definition
  award_emoji:
    - :awardable_id
  statuses: &statuses_excluded_definition
    - :trace
    - :token
    - :token_encrypted
    - :when
    - :artifacts_file
    - :artifacts_metadata
    - :artifacts_file_store
    - :artifacts_metadata_store
    - :artifacts_size
    - :commands
    - :runner_id
    - :trigger_request_id
    - :erased_by_id
    - :auto_canceled_by_id
    - :stage_id
    - :upstream_pipeline_id
    - :resource_group_id
    - :waiting_for_resource_at
    - :processed
    - :id_convert_to_bigint
    - :stage_id_convert_to_bigint
  builds: *statuses_excluded_definition
  generic_commit_statuses: *statuses_excluded_definition
  bridges: *statuses_excluded_definition
  sentry_issue:
    - :issue_id
  push_event_payload:
    - :event_id
    - :event_id_convert_to_bigint
  project_badges:
    - :group_id
  resource_label_events:
    - :reference
    - :reference_html
    - :epic_id
    - :issue_id
    - :merge_request_id
    - :label_id
  runners:
    - :token
    - :token_encrypted
  error_tracking_setting:
    - :encrypted_token
    - :encrypted_token_iv
    - :enabled
    - :integrated
  service_desk_setting:
    - :outgoing_name
    - :file_template_project_id
  priorities:
    - :label_id
  events:
    - :target_id
    - :id_convert_to_bigint
  timelogs:
    - :issue_id
    - :merge_request_id
    - :note_id
  notes:
    - :noteable_id
    - :review_id
    - :namespace_id
  commit_notes:
    - :noteable_id
    - :review_id
    - :namespace_id
  label_links:
    - :label_id
    - :target_id
  issue_assignees:
    - :issue_id
  zoom_meetings:
    - :issue_id
  design: &design_excluded_definition
    - :issue_id
  designs: *design_excluded_definition
  design_versions:
    - :issue_id
  actions:
    - :design_id
    - :version_id
    - image_v432x230
  links:
    - :release_id
  project_members:
    - :source_id
    - :member_namespace_id
    - :invite_email_success
    - :state
  group_members:
    - :state
  metrics:
    - :merge_request_id
    - :pipeline_id
  suggestions:
    - :note_id
  ci_pipelines:
    - :auto_canceled_by_id
    - :pipeline_schedule_id
    - :merge_request_id
    - :external_pull_request_id
    - :ci_ref_id
    - :locked
  pipeline_metadata:
    - :pipeline_id
  stages:
    - :pipeline_id
  merge_access_levels:
    - :protected_branch_id
  push_access_levels:
    - :protected_branch_id
    - :deploy_key_id
  unprotect_access_levels:
    - :protected_branch_id
  create_access_levels:
    - :protected_tag_id
    - :deploy_key_id
  deploy_access_levels:
    - :protected_environment_id
  boards:
    - :milestone_id
    - :iteration_id
    - :iteration_cadence_id
  lists:
    - :board_id
    - :label_id
    - :milestone_id
    - :iteration_id
  epic:
    - :start_date_sourcing_milestone_id
    - :due_date_sourcing_milestone_id
    - :parent_id
    - :state_id
    - :start_date_sourcing_epic_id
    - :due_date_sourcing_epic_id
  epic_issue:
    - :epic_id
    - :issue_id
  system_note_metadata:
    - :description_version_id
    - :note_id
  milestone_releases:
    - :milestone_id
    - :release_id
  resource_milestone_events:
    - :id
    - :issue_id
    - :merge_request_id
    - :milestone_id
  resource_state_events:
    - :id
    - :issue_id
    - :merge_request_id
    - :epic_id
    - :source_merge_request_id
  iteration:
    - :id
    - :title
    - :title_html
    - :project_id
    - :description_html
    - :cached_markdown_version
    - :iterations_cadence_id
    - :sequence
  resource_iteration_events:
    - :id
    - :issue_id
    - :merge_request_id
    - :iteration_id
  iterations_cadence:
    - :id
    - :last_run_date
    - :duration_in_weeks
    - :iterations_in_advance
    - :automatic
    - :group_id
    - :created_at
    - :updated_at
    - :start_date
    - :active
    - :roll_over
    - :description
    - :sequence
  work_item_type:
    - :id
    - :cached_markdown_version
    - :name
    - :description
    - :description_html
    - :icon_name
    - :namespace_id
    - :updated_at

methods:
  project:
    - :allow_merge_on_skipped_pipeline
    - :squash_option
  notes:
    - :type
  commit_notes:
    - :type
  labels:
    - :type
  label:
    - :type
  statuses:
    - :type
  merge_request_diff_files:
    - :utf8_diff
  merge_requests:
    - :diff_head_sha
    - :source_branch_sha
    - :target_branch_sha
    - :state
  events:
    - :action
  push_event_payload:
    - :action
  project_badges:
    - :type
  lists:
    - :list_type
  issues:
    - :state

# Add in this list the nested associations that are used to export the parent
# association, but are not present in the tree list. In other words, the associations
# that needs to be preloaded but do not need to be exported.
preloads:
  issues:
    project: :route
  builds:
    metadata:
    project:
  bridges:
    metadata:
  merge_requests:
    source_project: :route # needed by source_branch_sha and diff_head_sha
    target_project: :route # needed by target_branch_sha
    assignees: # needed by assigne_id that is implemented by DeprecatedAssignee

# Specify a custom export reordering for a given relationship
# For example for issues we use a custom export reordering by relative_position, so that on import, we can reset the
# relative position value, but still keep the issues order to the order in which issues were in the exported project.
# By default the ordering of relations is done by PK.
# column - specify the column by which to reorder, by default it is relation's PK
# direction - specify the ordering direction :asc or :desc, default :asc
# nulls_position - specify where would null values be positioned. Because custom ordering column can contain nulls we
#                  need to also specify where would the nulls be placed. It can be :nulls_last or :nulls_first, defaults
#                  to :nulls_last
# Example:
# export_reorders:
#   project:
#     issues:
#       column: :relative_position
#       direction: :asc
#       nulls_position: :nulls_last
export_reorders:
  project:
    issues:
      column: :relative_position
      direction: :asc
      nulls_position: :nulls_last

# EE specific relationships and settings to include. All of this will be merged
# into the previous structures if EE is used.
ee:
  tree:
    project:
      - issues:
        - epic_issue:
          - :epic
        - :issuable_sla
        - iteration:
          - :iterations_cadence
        - resource_iteration_events:
          - iteration:
            - :iterations_cadence
      - protected_branches:
        - :unprotect_access_levels
      - protected_environments:
        - :deploy_access_levels
      - :security_setting
      - :push_rule
      - boards:
        - :milestone
        - lists:
          - :milestone
      - approval_rules:
        - :approval_project_rules_protected_branches
        - :approval_project_rules_users

  included_attributes:
    issuable_sla:
      - :issue
      - :due_at
    push_rule:
      - :force_push_regex
      - :delete_branch_regex
      - :commit_message_regex
      - :author_email_regex
      - :file_name_regex
      - :branch_name_regex
      - :commit_message_negative_regex
      - :max_file_size
      - :deny_delete_tag
      - :member_check
      - :is_sample
      - :prevent_secrets
      - :reject_unsigned_commits
      - :commit_committer_check
      - :regexp_uses_re2
      - :reject_non_dco_commits
    unprotect_access_levels:
      - :access_level
      - :user_id
      - :group_id
    deploy_access_levels:
      - :created_at
      - :updated_at
      - :access_level
      - :user_id
      - :group_id
    protected_environments:
      - :project_id
      - :group_id
      - :name
      - :created_at
      - :updated_at
    project_feature:
      - :requirements_access_level
    security_setting:
      - :project_id
      - :created_at
      - :updated_at
      - :auto_fix_container_scanning
      - :auto_fix_dast
      - :auto_fix_dependency_scanning
      - :auto_fix_sast
    project:
      - :requirements_enabled
      - :requirements_access_level
    resource_iteration_events:
      - :user_id
      - :action
      - :created_at
    iteration:
      - :iid
      - :created_at
      - :updated_at
      - :start_date
      - :due_date
      - :group_id
      - :description
    iterations_cadence:
      - :title
    approval_rules:
      - :approvals_required
      - :name
      - :rule_type
      - :scanners
      - :vulnerabilities_allowed
      - :severity_levels
      - :report_type
      - :vulnerability_states
      - :orchestration_policy_idx
      - :applies_to_all_protected_branches
    approval_project_rules_protected_branches:
      - :protected_branch
    approval_project_rules_users:
      - :user_id
  excluded_attributes:
    project:
      - :vulnerability_hooks_integrations
    approval_rules:
      - :created_at
      - :updated_at
  methods:
    approval_project_rules_protected_branches:
      - :branch_name
  preloads:
    issues:
      epic:

  # When associated resources are from outside the project, you might need to
  # validate that a user who is exporting the project or group can access these
  # associations. `include_if_exportable` accepts an array of associations for a
  # resource. During export, the `exportable_association?` method on the
  # resource is called with the association's name and user to validate if
  # associated resource can be included in the export.
  #
  # This definition will call issue's `exportable_association?(:epic_issue,
  # current_user: current_user)` method and include issue's epic_issue association
  # for each issue only if the method returns true:
  #
  # Example:
  # include_if_exportable:
  #   project:
  #     issues:
  #       - epic_issue
  include_if_exportable:
    project:
      issues:
        - :epic_issue
